package com.hb.study.jdk;

import org.junit.Test;

/**
 * 递归测试：阶乘、斐波那契数列
 *
 * @author Mr.Huang
 * @version v0.1, RecursiveTest.java, 2020/5/21 15:03, create by huangbiao.
 */
public class RecursiveTest {

    public static void main(String[] args) {

        System.out.println(recursive(5));

    }

    /**
     * 计算n的阶乘
     */
    private static int recursive(int i) {
        int sum = 0;
        if (0 == i)
            return (1);
        else
            sum = i * recursive(i - 1);
        return sum;
    }

    @Test
    public void test1() {
        for (int i = 0; i < 8; i++) {
            System.out.println("第" + (i + 1) + "个数是：" + calcN(i + 1));
            System.out.println("前" + (i + 1) + "个数的和是：" + calcCountBeforeN(i + 1));
        }
    }

    /**
     * 斐波那契数列，计算第n个数的值
     * 1、1、2、3、5、8、13、21
     */
    private int calcN(int n) {
        if (n == 1) {
            return 1;
        } else if (n == 2) {
            return 1;
        } else {
            return calcN(n - 2) + calcN(n - 1);
        }
    }

    /**
     * 斐波那契数列，计算前n个数的和
     * 1、1、2、3、5、8、13、21
     */
    private int calcCountBeforeN(int n) {
        int count = 0;
        for (int i = 0; i < n; i++) {
            count += calcN(i + 1);
        }
        return count;
    }

}

    